package com.lg.cms.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.api.R;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lg.cms.entity.Article;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lg.cms.entity.Tags;
import com.lg.cms.vo.LayerTableVO;
import com.lg.cms.vo.admin.SuperArticleVO;
import com.lg.cms.vo.admin.addArticleVO;
import com.lg.cms.vo.news.ArticleVO;
import com.lg.cms.vo.news.ImageVO;
import com.lg.cms.vo.news.VideoVO;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 * 文章表 服务类
 * </p>
 *
 * @author lg
 * @since 2020-09-21
 */
public interface ArticleService extends IService<Article> {
    /***
     * 修改
     */
    String updateArticle(Article article, Set<Integer> tagsIdSet);






    /**
     * 获取后缀限定集合, 图片与视频
     * @return
     */
    Map<String, Set<String>> getTypeMap();

    /**
     * 创建文章标签多对多
     * @param article
     * @param tagsIdSet
     * @return
     */
    R<?> addArticle(Article article, Set<Integer> tagsIdSet);

    /**
     * article转展示对象VO
     */
    SuperArticleVO toSuperArticleVO(Article article);

    /**
     * 获取文章标签列表
     * @param articleId
     * @return
     */
    List<Tags> getTagsListByArticleId(Integer articleId);

    /**
     * 获取某栏目文章列表(第一页), 前台展示
     * @return
     */
    List<ArticleVO> getListByCategoryId(Integer categoryId);
    /**
     * 获取视频分类列表(第一页), 前台展示
     * @return
     */
    List<VideoVO> getListByVideo(QueryWrapper wrapper);
    /**
     * 获取图片分类列表(第一页), 前台展示
     * @return
     */
    List<ImageVO> getListByImage(QueryWrapper wrapper);
    /**
     * 获取推荐文章列表(第一页), 前台展示
     * @return
     */
    List<ArticleVO> getListByRecommended();

    /**
     * 获取某标签文章列表(第一页), 前台展示
     * @param tagsId
     * @return
     */
    List<ArticleVO> getListByTagsId(Integer tagsId);

    /**
     * 搜索文章查询列表(第一页), 前台展示
     * @param wrapper
     * @return
     */
    List<ArticleVO> getListByWrapper(QueryWrapper wrapper, String value);

    /**
     * 搜索文章查询page对象
     * @param wrapper
     * @param pageNum
     * @return
     */
    Page<ArticleVO> getPageByWrapper(QueryWrapper wrapper, Integer pageNum, String value);
    /**
     * 获取某标签文章Page对象
     * @param tagsId
     * @param pageNum
     * @return
     */
    Page getPageByTagsId(Integer tagsId, Integer pageNum);
    /**
     * 获取列表文章页page对象
      * @param categoryId
     * @param pageNum
     * @return
     */
    Page<ArticleVO> getPageByCategoryId(Integer categoryId, Integer pageNum);

    /**
     * 获取图片列表页page对象
     * @param pageNum
     * @return
     */
    Page<ImageVO> getPageByImage(Integer pageNum, QueryWrapper wrapper);
    /**
     * 获取视频列表页page对象
     * @param pageNum
     * @return
     */
    Page<VideoVO> getPageByVideo(Integer pageNum, QueryWrapper wrapper);
    /**
     * 获取推荐文章列表页page对象
     * @param pageNum
     * @return
     */
    Page<ArticleVO> getPageByRecommended(Integer pageNum);

    /**
     * 转文章VO对象
     * @param article
     * @return
     */
    ArticleVO toArticleVO(Article article);

    /**
     * 转文章图片VO对象
     * @param article
     * @return
     */
    ImageVO toImageVO(Article article);

    /**
     * 转文章视频VO对象
     * @param article
     * @return
     */
    VideoVO toVideoVO(Article article);

//   int hi=2000000000;
    /**
     * 新增文章VO对象搜索关键字关联内容
     * @param article
     * @param value
     * @return
     */
    ArticleVO toSelectArticleVO(Article article , String value);


    LayerTableVO findByPage(Integer currPage, Integer pageSize);
    int deleteArticle(Integer id);


    int AlldeleteArticle(int[] li);

    List   <addArticleVO> Binding_typeArticle();

    /**
     * 作者、状态、分类查询
     * @param author
     * @param article_type_ids
     * @param state
     * @return
     */

    LayerTableVO fuzzyAllList(String author, Integer article_type_ids, boolean state,Integer tagsId, Integer pageNum);

    /**
     * 作者查询
     * @param author
     * @return
     */

    LayerTableVO fuzzyAllList(String author,Integer tagsId, Integer pageNum);

    /**
     * 分类查询
     * @param article_type_ids
     * @return
     */

    LayerTableVO fuzzyAllList(Integer article_type_ids,Integer tagsId, Integer pageNum);

    /**
     * 状态查询
     * @param state
     * @return
     */
    LayerTableVO fuzzyAllList(boolean state,Integer tagsId, Integer pageNum);

    /**
     * 查询 分类，状态
     * @param article_type_ids
     * @param states
     * @return
     */
    LayerTableVO fuzzyAllList(Integer article_type_ids, boolean states,Integer tagsId, Integer pageNum);

    /**
     * 查询 作者 状态
     * @param author
     * @param states
     * @return
     */
    LayerTableVO fuzzyAllList(String author, boolean states,Integer tagsId, Integer pageNum);

    /**
     * 查询 作者 分类
     * @param author
     * @param article_type_ids
     * @return
     */

    LayerTableVO fuzzyAllList(String author,Integer article_type_ids,Integer tagsId, Integer pageNum);

    List<addArticleVO> selectArticle(Integer id);
}
